Verimli dosya yolu keşfi ve filtreleme için glob desen eşleştirmeyi keşfedin. Sözdizimini, en iyi uygulamaları ve çeşitli diller/işletim sistemleri için gerçek dünya örneklerini öğrenin.
Glob Desen Eşleştirme: Dosya Yolu Keşfi ve Filtreleme İçin Kapsamlı Bir Rehber
Yazılım geliştirme ve sistem yönetimi dünyasında, dosyaları verimli bir şekilde yönetmek ve düzenlemek temel bir gereksinimdir. Glob desen eşleştirme, belirtilen desenlere göre dosyaları keşfetmek ve filtrelemek için güçlü ve özlü bir yol sunar. Bu makale, globbing'in karmaşıklıklarını derinlemesine inceleyecek, sözdizimini, kullanımını ve çeşitli programlama dilleri ile işletim sistemlerindeki uygulamalarını keşfedecektir.
Glob Desen Eşleştirme Nedir?
"Global" kelimesinin kısaltması olan globbing, dosya adlarını ve dizin yollarını joker karakterler kullanarak eşleştirmek için kullanılan bir tekniktir. Daha karmaşık ve incelikli desen eşleştirme yetenekleri sunan düzenli ifadelerden farklı olarak, globbing basit ve sezgisel desen tanımlarına odaklanır. Belirli kriterleri karşılayan dosya veya dizin kümelerini tanımlamak için komut satırı arayüzlerinde, kabuk betiklerinde ve programlama dillerinde yaygın olarak kullanılır.
Temel Globbing Sözdizimi
Glob desen eşleştirmenin özü, joker karakterlerinde yatmaktadır. Bu karakterler, bir dosya veya dizin adındaki bir veya daha fazla karakteri temsil etmek için kısa bir gösterim sağlar. En yaygın joker karakterler şunlardır:
*
(Yıldız): Sıfır veya daha fazla karakterle eşleşir. Örneğin,*.txt
".txt" ile biten tüm dosyalarla eşleşir.?
(Soru İşareti): Tam olarak bir karakterle eşleşir.file?.txt
"file1.txt", "file2.txt" ile eşleşir, ancak "file12.txt" ile eşleşmez.[]
(Köşeli Parantezler): Parantez içindeki herhangi bir tek karakterle eşleşir.file[1-3].txt
"file1.txt", "file2.txt" ve "file3.txt" ile eşleşir. [a-z] veya [A-Z] gibi karakter aralıkları da belirtebilirsiniz.file[abc].txt
"filea.txt", "fileb.txt" ve "filec.txt" ile eşleşir.[^]
(Köşeli Parantez İçindeki Şapka): Parantez içinde olmayan herhangi bir tek karakterle eşleşir.file[^1-3].txt
"file4.txt", "filea.txt" vb. ile eşleşir, ancak "file1.txt", "file2.txt" veya "file3.txt" ile eşleşmez.{}
(Süslü Parantezler - evrensel olarak desteklenmez): Birden fazla alternatifi belirtmeye olanak tanır.file{1,2,3}.txt
,file1.txt file2.txt file3.txt
ile eşdeğerdir. Bu,image.{png,jpg,gif}
gibi daha karmaşık desenler için de kullanılabilir.
Bu temel joker karakterler, daha karmaşık desenler oluşturmak için birleştirilebilir. Örneğin, *.log.*
".log" ile biten ve ardından başka bir uzantıya sahip herhangi bir dosya ile eşleşir.
Farklı Programlama Dillerinde Globbing
Globbing'in temel kavramları tutarlı kalsa da, belirli uygulamalar ve sözdizimi farklı programlama dilleri arasında biraz değişebilir.
Python
Python, glob desenleriyle çalışmak için glob
modülünü sağlar.
import glob
# Find all .txt files in the current directory
txt_files = glob.glob("*.txt")
print(txt_files)
# Find all .jpg files in a subdirectory called 'images'
jpg_files = glob.glob("images/*.jpg")
print(jpg_files)
# Recursively find all .py files in the current directory and its subdirectories
py_files = glob.glob("**/*.py", recursive=True)
print(py_files)
glob
modülünün glob()
işlevi, giriş olarak bir glob deseni alır ve eşleşen dosya yollarının bir listesini döndürür. recursive=True
argümanı, alt dizinleri dolaşmaya olanak tanır; bu, Python 3.5'te tanıtılan bir özelliktir.
Örnek: Uluslararasılaşma (i18n) Dosyaları
Dilleri kodlarına göre düzenlenmiş çeviri dosyalarına sahip bir proje düşünün, örneğin en.json
, fr.json
, de.json
. Tüm çeviri dosyalarını bulmak için glob.glob("*.json")
kullanabilirsiniz. Bu, dosya adlarında kullanılan belirli dil kodlarından bağımsız olarak genel olarak çalışır.
JavaScript (Node.js)
Node.js'te, glob
paketi (npm aracılığıyla mevcuttur) globbing işlevselliği sağlar.
const glob = require("glob");
// Find all .js files in the 'src' directory
glob("src/**/*.js", (err, files) => {
if (err) {
console.error(err);
return;
}
console.log(files);
});
Node.js'teki glob()
işlevi zaman uyumsuzdur ve bir hata nesnesi ile eşleşen dosya yollarının bir dizisini alan bir geri arama işlevi alır. src/**/*.js
deseni, src
dizini ve alt dizinlerindeki tüm .js
dosyalarını özyinelemeli olarak arar.
Örnek: Yapılandırma Dosyalarını Bulma
Birçok JavaScript projesi .eslintrc.js
veya webpack.config.js
gibi yapılandırma dosyaları kullanır. Bu dosyaları hızlıca bulmak için glob kullanabilirsiniz: glob("*.config.js")
.
Java
Java 7, FileSystem.getPathMatcher()
yöntemi aracılığıyla globbing desteğini içeren java.nio.file
paketini tanıttı.
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
public class GlobExample {
public static void main(String[] args) throws IOException {
Path startingDir = Paths.get(".");
String pattern = "glob:**/*.java"; // Recursive search for Java files
PathMatcher matcher = FileSystems.getDefault().getPathMatcher(pattern);
Files.walkFileTree(startingDir, new SimpleFileVisitor() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
if (matcher.matches(file)) {
System.out.println("Found: " + file);
}
return FileVisitResult.CONTINUE;
}
});
}
}
Bu örnek, dosya sistemini dolaşmak için Files.walkFileTree()
ve her dosyanın belirtilen glob deseniyle eşleşip eşleşmediğini kontrol etmek için PathMatcher
kullanır. glob:**/*.java
deseni, tüm .java
dosyalarını özyinelemeli olarak arar.
Örnek: Eklenti Dosyalarını Yükleme
Belirli bir dizinden eklentileri yükleyen bir Java uygulaması hayal edin. Eklenti dizinindeki tüm JAR dosyalarını bulmak için globbing kullanılabilir: glob:plugins/*.jar
.
Kabuk Betikleme (Bash)
Globbing, Bash gibi kabuk betikleme dillerine derinlemesine entegre edilmiştir.
#!/bin/bash
# Find all .txt files in the current directory
for file in *.txt;
do
echo "Found file: $file"
done
# Find all files starting with 'report' in the 'logs' directory
for file in logs/report*;
do
echo "Found report: $file"
done
#Recursively find all files ending in '.conf'
shopt -s globstar #Enable globstar
for file in **/*.conf;
do
echo "Found conf file: $file"
done
Bash'te glob desenleri, komut yürütülmeden önce kabuk tarafından doğrudan genişletilir. globstar
seçeneği (shopt -s globstar
), **
deseniyle özyinelemeli globbing'i etkinleştirir.
Örnek: Sistem Yönetimi Betikleri Sistem yöneticileri, günlük dosyalarını, yapılandırma dosyalarını veya diğer sistem kaynaklarını yönetmek için betiklerde sıklıkla globbing kullanır. Örneğin, belirli bir tarihten eski tüm geçici dosyaları silmek, ilgili dosyaları tanımlamak için globbing'i içerebilir.
Gelişmiş Globbing Teknikleri
Genişletilmiş Globbing (Bash)
Bash, daha güçlü desen eşleştirme yetenekleri sunan genişletilmiş globbing özellikleri sağlar. Bu özelliklerin shopt
komutu kullanılarak etkinleştirilmesi gerekir.
#!/bin/bash
shopt -s extglob # Enable extended globbing
# Match files that end in .txt but are NOT named 'important.txt'
for file in !(important).txt;
do
echo "Found file: $file"
done
# Match files that start with 'data' followed by one or more digits
for file in data+([0-9]).txt;
do
echo "Found file: $file"
done
Bazı faydalı genişletilmiş globbing desenleri:
?(pattern)
: Desenin sıfır veya bir tekrarı ile eşleşir.*(pattern)
: Desenin sıfır veya daha fazla tekrarı ile eşleşir.+(pattern)
: Desenin bir veya daha fazla tekrarı ile eşleşir.@(pattern1|pattern2|pattern3)
: Belirtilen desenlerden biriyle eşleşir.!(pattern)
: Belirtilen desen dışındaki her şeyle eşleşir.
Globbing'i Diğer Araçlarla Birleştirme
Globbing, daha karmaşık dosya işleme görevlerini gerçekleştirmek için diğer komut satırı araçlarıyla sorunsuz bir şekilde entegre edilebilir.
# Find all .txt files and pipe the list to grep to search for the word 'error'
ls *.txt | grep "error"
# Use find with globbing to delete all .tmp files older than 7 days
find . -name "*.tmp" -mtime +7 -delete
İlk örnek, tüm .txt
dosyalarını listelemek için ls
kullanır ve ardından "error" kelimesini içeren satırları aramak için çıktıyı grep
'e yönlendirir. İkinci örnek, tüm .tmp
dosyalarını bulmak için find
'ı -name
seçeneğiyle ve 7 günden eski dosyaları silmeden önce filtrelemek için -mtime
seçeneğiyle kullanır.
Globbing ve Düzenli İfadeler
Hem globbing hem de düzenli ifadeler desen eşleştirme için kullanılsa da, karmaşıklık ve yetenekleri açısından önemli ölçüde farklılık gösterirler.
Globbing:
- Basit ve sezgisel sözdizimi.
- Öncelikli olarak dosya adı eşleştirmesi için kullanılır.
- Sınırlı sayıda joker karakter kümesi.
- Basit desenler için daha hızlı yürütme.
Düzenli İfadeler:
- Daha geniş bir metakarakter ve niceleyici yelpazesi ile daha karmaşık sözdizimi.
- Sadece dosya adlarında değil, herhangi bir metindeki desenleri eşleştirmek için kullanılabilir.
- Karmaşık desen eşleştirme senaryoları için güçlü ve esnek.
- Düzenli ifade motorunun ek yükü nedeniyle basit desenler için globbing'den daha yavaş olabilir.
Genel olarak, globbing basit dosya adı eşleştirme görevleri için uygunken, düzenli ifadeler daha karmaşık metin işleme ve desen eşleştirme senaryoları için daha uygundur.
Glob Desen Eşleştirmeyi Kullanmak İçin En İyi Uygulamalar
- Belirgin Olun: İstenmeyen dosyalarla eşleşebilecek aşırı genel desenlerden kaçının. Örneğin,
*
yerine yalnızca metin dosyalarını hedeflemek için*.txt
kullanın. - Özyinelemeyi Dikkatli Kullanın: Özyinelemeli globbing (örn.
**/*
), özellikle büyük dizin yapılarında kaynak yoğun olabilir. Özyinelemeli desenleri kullanmadan önce performans etkilerini göz önünde bulundurun. - Desenlerinizi Test Edin: Glob desenlerine göre dosyaları değiştiren veya silen komutları çalıştırmadan önce, desenlerin hedeflenen dosyalarla eşleştiğinden emin olmak için test edin. Sonuçları önizlemek için
ls
veyaecho
kullanın. - Platforma Özgü Farklılıkları Anlayın: Farklı işletim sistemleri ve kabuklar arasındaki globbing uygulamalarındaki ince farklılıkların farkında olun. Örneğin, büyük/küçük harf duyarlılığı değişebilir.
- Özel Karakterleri Kaçırın: Gerçek bir joker karakterle (örn. yıldız) eşleşmeniz gerekiyorsa, onu bir ters eğik çizgi (
\*
) kullanarak kaçırın.
Gerçek Dünya Örnekleri ve Kullanım Durumları
- Web Geliştirme: Optimizasyon için bir varlık dizinindeki tüm resim dosyalarını (
.jpg
,.png
,.gif
) bulma. - Veri Analizi:
data_2023-10-26.log
,data_2023-10-27.log
vb. adlara sahip bir dizi günlük dosyasını işleme. - Sistem Yönetimi: Belirli bir tarihten eski dosyaları tanımlayarak ve arşivleyerek günlük dosyalarını döndürme.
- Derleme Otomasyonu: Derleme işlemi sırasında belirli dosyaları veya dizinleri dahil etme veya hariç tutma.
- Kod Üretimi: Belirli desenlere dayalı kod oluşturmak için şablon dosyalarını bulma.
- Yapılandırma Yönetimi: Bir proje dizinindeki tüm yapılandırma dosyalarını bulma.
Güvenlik Hususları
Globbing kullanırken, potansiyel güvenlik risklerine dikkat etmek çok önemlidir. Kullanıcı girdisi glob desenleri oluşturmak için kullanılırsa, istenmeyen dosya erişimine veya değişikliğe yol açabilir. Bu riskleri azaltmak için:
- Kullanıcı Girdisini Temizle: Kötü amaçlı desenleri önlemek için glob desenlerinde kullanmadan önce kullanıcı girdisini daima doğrulayın ve temizleyin.
- Erişimi Sınırla: Globbing işlemini yürüten sürecin, dosyalara erişmek ve değiştirmek için en az gerekli ayrıcalıklara sahip olduğundan emin olun.
- Güvenli Alternatifleri Kullanın: Güvenliğin çok önemli olduğu durumlarda, yalnızca globbing'e güvenmek yerine daha kontrollü dosya sistemi API'leri kullanmayı düşünün.
Sonuç
Glob desen eşleştirme, dosya yolu keşfi ve filtreleme için güçlü ve çok yönlü bir araçtır. Basit sözdizimi ve geniş çapta kullanılabilirliği, onu geliştiriciler, sistem yöneticileri ve dosya ve dizinlerle çalışan herkes için temel bir beceri haline getirir. Temel kavramları, sözdizimi varyasyonlarını ve en iyi uygulamaları anlayarak, iş akışınızı kolaylaştırmak ve dosya yönetimi görevlerini etkili bir şekilde otomatikleştirmek için globbing'den yararlanabilirsiniz. İster kabuk betikleri yazıyor, ister uygulamalar geliştiriyor veya sunucuları yönetiyor olun, globbing dosya sistemiyle etkileşim kurmak için özlü ve verimli bir yol sağlar.